package com.dexing.od1;

import java.util.*;

/**
 *  小华和小薇一起通过玩积木游戏学习数学。 他们有很多积木，每个积木块上都有一个数字，积木块上的数字可能相同。
 *  小华随机拿一些积木挨着排成一排，请小薇找到这排积木中数字相同且所处位置最远的2块积木块，计算他们的距离，小薇请你帮忙替她解决这个问题。
 *  输入描述 
 *  第一行输入为N，表示小华排成一排的积木总数。 接下来N行每行一个数字，表示小华排成一排的积木上数字。 
 *  输出描述 
 *  相同数字的积木的位置最远距离；如果所有积木数字都不相同，请返回-1。 
 *  示例1输入输出示例仅供调试，后台判题数据一般不包含示例 
 *  输入 
 *  5
 *  1
 *  2
 *  3
 *  1
 *  4 
 *  输出 
 *  3 
 *  说明 
 *  共有5个积木，第1个积木和第4个积木数字相同，其距离为3。 
 *  示例2输入输出示例仅供调试，后台判题数据一般不包含示例 
 *  输入 
 *  2
 *  1
 *  2 
 *  输出 
 *  -1 
 *  说明 
 *  一共有两个积木，没有积木数字相同，返回-1。 
 *  备注： 0<=积木上的数字<10^9 1<=积木长度<=10^5
 */
public class D1562JiMu {
    public static void main(String[] args) {
        //处理输入
        Scanner in=new Scanner(System.in);
        int count = in.nextInt();
        in.nextLine();

        HashMap<Integer, List<Integer>> blocks = new HashMap<Integer, List<Integer>>();
        for (int i = 0;i<count;i++) {
            int num = in.nextInt();
            if (blocks.containsKey(num)) {
                List<Integer> block_pos = blocks.get(num);
                block_pos.add(i);
                blocks.put(num, block_pos);
            } else {
                List<Integer> block_pos = new ArrayList<Integer>();
                block_pos.add(i);
                blocks.put(num, block_pos);
            }
            in.nextLine();
        }

        int max_distance = -1;
        for (Map.Entry<Integer, List<Integer>> x : blocks.entrySet()) {
            if (x.getValue().size() > 1) {
                max_distance = Math.max(max_distance, Collections.max(x.getValue()) - Collections.min(x.getValue()));
            }
        }
        System.out.println(max_distance);


    }
}
